<?xml version="1.0" ?>
<xs:schema id="Model" targetNamespace="http://euss.evaluant.com/schemas/GenerationModel.xsd"
	xmlns:mstns="http://euss.evaluant.com/schemas/GenerationModel.xsd" xmlns="http://euss.evaluant.com/schemas/GenerationModel.xsd"
	xmlns:xs="http://www.w3.org/2001/XMLSchema"	attributeFormDefault="qualified" elementFormDefault="qualified">

  <xs:complexType name="PropertyType">
    <xs:attribute name="name" form="unqualified" type="xs:string" use="required" />
    <xs:attribute name="type" form="unqualified" type="xs:string" use="required" />
  </xs:complexType>

  <xs:complexType name="ClassType">
    <xs:sequence>
      <xs:element name="Property" type="PropertyType" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="name" form="unqualified" type="xs:string" use="required" />
    <xs:attribute name="inherit" form="unqualified" type="xs:string" use="optional" />
  </xs:complexType>

  <xs:complexType name="InterfaceType">
    <xs:sequence>
      <xs:element name="Property" type="PropertyType" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="name" form="unqualified" type="xs:string" use="required" />
  </xs:complexType>

  <xs:complexType name="RelationshipDescriptionType">
    <xs:attribute name="name" form="unqualified" type="xs:string" use="required" />
    <xs:attribute name="role" form="unqualified" type="xs:string" use="required" />
    <xs:attribute name="multiplicity" form="unqualified" type="xs:string" use="required" />
  </xs:complexType>

  <xs:complexType name="RelationshipType">
    <xs:all>
      <xs:element name="Parent" type="RelationshipDescriptionType" minOccurs="1" maxOccurs="1" />
      <xs:element name="Child" type="RelationshipDescriptionType" minOccurs="1" maxOccurs="1" />
      <xs:element name="LinkClass" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:attribute name="name" form="unqualified" type="xs:string" use="required" />
        </xs:complexType>
      </xs:element>
    </xs:all>
    <xs:attribute name="type" form="unqualified" type="xs:string" use="required" />
  </xs:complexType>

  <xs:complexType name="EnumerationType">
    <xs:sequence>
      <xs:element name="Literal" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:attribute name="name" form="unqualified" type="xs:string" use="required" />
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="name" form="unqualified" type="xs:string" use="required" />
  </xs:complexType>

  <xs:complexType name="PackageType">
    <xs:sequence maxOccurs="unbounded">
      <xs:element name="Class" type="ClassType" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="Relationship" type="RelationshipType" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="Enumeration" type="EnumerationType" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="Interface" type="InterfaceType"  minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="name" form="unqualified" type="xs:string" use="required" />
  </xs:complexType>

  <xs:complexType name="ModelType">
    <xs:choice maxOccurs="unbounded">
      <xs:element name="Package" type="PackageType" />
    </xs:choice>
  </xs:complexType>

  <xs:element name="Model" type="ModelType" />
</xs:schema>